from typing import Any, Dict, List, NamedTuple, Optional, Tuple

class SummaryItem(NamedTuple):
    """Summary statistics for a specific object type."""

    type_description: str
    instance_count: int
    total_size_bytes: int

SummaryType = List[SummaryItem]

class SummaryTracker:
    s0: SummaryType
    s1: Optional[SummaryType]
    summaries: Dict[Any, SummaryType]
    ignore_self: bool

    def __init__(self, ignore_self: bool = True) -> None: ...
    def create_summary(self) -> SummaryType: ...
    def diff(self, summary1: Optional[SummaryType] = None, summary2: Optional[SummaryType] = None) -> SummaryType: ...
    def print_diff(self, summary1: Optional[SummaryType] = None, summary2: Optional[SummaryType] = None) -> None: ...
    def format_diff(
        self, summary1: Optional[SummaryType] = None, summary2: Optional[SummaryType] = None
    ) -> List[str]: ...
    def store_summary(self, key: Any) -> None: ...

class ObjectTracker:
    o0: List[Any]
    o1: Optional[List[Any]]

    def __init__(self) -> None: ...
    def _get_objects(self, ignore: Tuple[Any, ...] = ()) -> List[Any]: ...
    def get_diff(self, ignore: Tuple[Any, ...] = ()) -> Tuple[List[Any], List[Any]]: ...
    def print_diff(self, ignore: Tuple[Any, ...] = ()) -> None: ...
    def format_diff(self, ignore: Tuple[Any, ...] = ()) -> List[str]: ...
